home *** CD-ROM | disk | FTP | other *** search
/ Amiga ISO Collection / AmigaUtilCD2.iso / Programming / Misc / LK_V1.06.LHA / LK V1.06 / SOURCES / stub.s < prev   
Encoding:
Text File  |  1994-11-01  |  6.6 KB  |  396 lines

  1. ;    OPT    O+,OW-,L+
  2. ;--------------------------------------------------
  3. ;    lk V1.01 _stub function.
  4. ;    $VER: stub.s 1.00 (18.07.94)
  5. ;    Written by Alexis WILKE (c) 1994.
  6. ;
  7. ;    This code will be used instead of the
  8. ;    internal default:
  9. ;        MOVEQ #0,D0 : RTS
  10. ;    It displays a window with a simple
  11. ;    message.
  12. ;--------------------------------------------------
  13.  
  14.     INCDIR    "INCLUDE:INCLUDE.STRIP/"
  15.     INCLUDE    "INTUITION/intuition.i"
  16.     INCLUDE    "INCLUDE:sw.i"
  17.  
  18.     XDEF    _stub
  19.  
  20. KEYCODE_ESC    =    $45
  21.  
  22. WIDTH        =    420
  23. HEIGHT        =    55
  24.  
  25.     SECTION    TEXT,CODE
  26. ;--------------------------------------------------
  27. _stub
  28.     MoveM.L    D2-D6/A3-A6,-(A7)
  29.     Move.L    A0,D0
  30.     Beq.B    .invalid
  31.     Tst.B    (A0)
  32.     Bne.B    .nameok
  33. .invalid
  34.     Lea    FuncDefault(PC),A0
  35. .nameok
  36.     Lea    FuncName(PC),A1
  37.     MoveQ    #FuncNameEnd-FuncName-1,D0
  38. .name
  39.     Move.B    (A0)+,(A1)+
  40.     Dbf    D0,.name
  41.     Lea    _stub(PC),A4            ;Get pointer offset
  42.  
  43.     Lea    IName(PC),A1
  44.     SYS    OldOpenLibrary,4.W        ;Open Intuition
  45.     Move.L    D0,IBase-_stub(A4)
  46.     Beq    .exit
  47.  
  48.     Lea    GName(PC),A1
  49.     SYS    OldOpenLibrary,4.W        ;Open Graphics
  50.     Move.L    D0,GBase-_stub(A4)
  51.     Beq    .exit
  52.  
  53.     MoveQ    #$01,D6
  54.     CmpI.W    #36,LIB_VERSION(A6)
  55.     Bcc.B    .ok
  56.     MoveQ    #$02,D6                ;Swap for 1.3 colors
  57. .ok
  58.     SYS    OpenWorkBench,IBase(PC)        ;Ensure the workbench is open!
  59.     Tst.L    D0
  60.     Beq    .exit
  61.     MoveA.L    D0,A3
  62.  
  63.     Lea    MyRPort(PC),A1
  64.     SYS    InitRastPort,GBase(PC)
  65.  
  66.     Lea    MyNewWindow(PC),A0        ;Center window
  67.     Move.W    #WIDTH,D4
  68.     Move.W    #HEIGHT,D5
  69.  
  70.     Move.L    #$0FF,D1
  71.     MoveQ    #$00,D0
  72.     Move.W    MyRPort+rp_TxHeight(PC),D0    ;Resize window on text height
  73.     Lsl.L    #$08,D0
  74.     DivU.W    #$0008,D0
  75.     Move.W    D0,OffsetY-_stub(A4)
  76.     MulU.W    D0,D5
  77.     Add.L    D1,D5
  78.     Lsr.L    #$08,D5
  79.     Cmp.W    sc_Height(A3),D5
  80.     Bcs.B    .yok
  81.     Move.W    sc_Height(A3),D5
  82. .yok
  83.     MoveQ    #$00,D0
  84.     Move.W    MyRPort+rp_TxWidth(PC),D0    ;Resize window on text width
  85.     Lsl.L    #$08,D0
  86.     DivU.W    #$0008,D0
  87.     Move.W    D0,OffsetX-_stub(A4)
  88.     MulU.W    D0,D4
  89.     Add.L    D1,D4
  90.     Lsr.L    #$08,D4
  91.     Cmp.W    sc_Width(A3),D4
  92.     Bcs.B    .xok
  93.     Move.W    sc_Width(A3),D4
  94. .xok
  95.     Move.W    D4,nw_Width(A0)
  96.     Move.W    D5,nw_Height(A0)
  97.  
  98.     Move.W    sc_Width(A3),D0
  99.     Sub.W    D4,D0
  100.     Lsr.W    #$01,D0
  101.     Move.W    D0,nw_LeftEdge(A0)
  102.     Move.W    sc_Height(A3),D0
  103.     Sub.W    D5,D0
  104.     Lsr.W    #$01,D0
  105.     Move.W    D0,nw_TopEdge(A0)
  106.     SYS    OpenWindow,IBase(PC)        ;Open our window
  107.     Move.L    D0,MyWindow-_stub(A4)
  108.     Beq    .exit
  109.  
  110.     MoveA.L    D0,A5
  111.     MoveA.L    wd_RPort(A5),A5
  112.  
  113.     MoveQ    #RP_JAM2,D0            ;Ensure a correct mode to draw
  114.     MoveA.L    A5,A1
  115.     SYS    SetDrMd,GBase(PC)
  116.  
  117.     MoveQ    #$00,D0
  118.     MoveQ    #5,D1
  119.     MulU.W    OffsetY(PC),D1
  120.     Lsr.L    #$08,D1
  121.     Add.W    rp_TxBaseline(A5),D1
  122.     Move.W    D4,D2
  123.     Lea    Title(PC),A0
  124.     Bsr    _write
  125.  
  126.     MoveQ    #$00,D0
  127.     MoveQ    #15,D1
  128.     MulU.W    OffsetY(PC),D1
  129.     Lsr.L    #$08,D1
  130.     Add.W    rp_TxBaseline(A5),D1
  131.     Move.W    D4,D2
  132.     Lea    Comment(PC),A0
  133.     Move.L    D6,-(A7)
  134.     MoveQ    #$03,D6
  135.     Bsr    _write
  136.     Move.L    (A7)+,D6
  137.  
  138.     MoveQ    #$00,D0
  139.     MoveQ    #25,D1
  140.     MulU.W    OffsetY(PC),D1
  141.     Lsr.L    #$08,D1
  142.     Add.W    rp_TxBaseline(A5),D1
  143.     Move.W    D4,D2
  144.     Lea    Function(PC),A0
  145.     Bsr    _write
  146.  
  147.     MoveQ    #100,D0
  148.     MulU.W    OffsetX(PC),D0
  149.     Lsr.L    #$08,D0
  150.     Move.W    D0,D2
  151.     Neg.L    D0
  152.     Add.W    D4,D0
  153.  
  154.     MoveQ    #14,D1
  155.     MulU.W    OffsetY(PC),D1
  156.     Lsr.L    #$08,D1
  157.     Sub.W    rp_TxHeight(A5),D1
  158.     Lsr.W    #$01,D1
  159.     Neg.W    D1
  160.     Add.W    rp_TxBaseline(A5),D1
  161.     Sub.W    rp_TxHeight(A5),D1
  162.     Add.W    D5,D1
  163.     SubQ.W    #$04,D1                ;The offset from bottom
  164.     SubQ.W    #$08,D2
  165.     Lea    OKText(PC),A0
  166.     Bsr    _write
  167.  
  168.     MoveQ    #$00,D0
  169.     MoveQ    #$00,D1
  170.     Move.W    D4,D2
  171.     Move.W    D5,D3
  172.     Bsr    _drawrect
  173.  
  174.     MoveQ    #100,D0
  175.     MulU.W    OffsetX(PC),D0
  176.     Lsr.L    #$08,D0
  177.     Neg.L    D0
  178.     Add.W    D4,D0
  179.     MoveQ    #14,D1
  180.     MulU.W    OffsetY(PC),D1
  181.     Lsr.L    #$08,D1
  182.     Neg.W    D1
  183.     Add.W    D5,D1
  184.     Move.W    D4,D2
  185.     SubQ.W    #$08,D2
  186.     Move.W    D5,D3
  187.     SubQ.W    #$04,D3
  188.     SubQ.W    #$04,D1
  189.     Bsr    _drawrect
  190.  
  191.     MoveA.L    A3,A0
  192.     SYS    ScreenToFront,IBase(PC)        ;Show the workbench screen
  193.  
  194.  
  195. .wait
  196.     MoveA.L    MyWindow(PC),A0
  197.     MoveA.L    wd_UserPort(A0),A0
  198.     SYS    WaitPort,4.W
  199.     MoveA.L    MyWindow(PC),A0
  200.     MoveA.L    wd_UserPort(A0),A0
  201.     SYS    GetMsg
  202.     Tst.L    D0
  203.     Beq.B    .wait
  204.     MoveA.L    D0,A0
  205.     CmpI.L    #RAWKEY,im_Class(A0)
  206.     Beq.B    .key
  207.     Move.W    im_Code(A0),D0
  208.     CmpI.W    #SELECTDOWN,D0
  209.     Beq    .exit
  210.     Bra.B    .wait
  211. .key
  212.     Move.W    im_Code(A0),D0
  213.     CmpI.W    #KEYCODE_V,D0
  214.     Beq.B    .exit
  215.     CmpI.W    #KEYCODE_B,D0
  216.     Beq.B    .exit
  217.     CmpI.W    #KEYCODE_ESC,D0
  218.     Bne.B    .wait
  219. .exit
  220.     Move.L    MyWindow(PC),D0
  221.     Beq.B    .nowin
  222.     Clr.L    MyWindow-_stub(A4)
  223.     MoveA.L    D0,A0
  224.     SYS    CloseWindow,IBase(PC)
  225. .nowin
  226.     MoveA.L    4.W,A6
  227.     Move.L    IBase(PC),D0
  228.     Beq.B    .noi
  229.     Clr.L    IBase-_stub(A4)
  230.     Move.L    D0,A1
  231.     SYS    CloseLibrary
  232. .noi
  233.     Move.L    GBase(PC),D0
  234.     Beq.B    .nog
  235.     Clr.L    GBase-_stub(A4)
  236.     Move.L    D0,A1
  237.     SYS    CloseLibrary
  238. .nog
  239.  
  240.     MoveM.L    (A7)+,D2-D6/A3-A6
  241.     Rts
  242.  
  243.  
  244. ;--------------------------------------------------
  245. ;Inputs:
  246. ;    D0 as the X position
  247. ;    D1 as the Y position
  248. ;    D2 as the size of the gadget
  249. ;    A0 as the string
  250. ;    A5 as the rastport
  251. ;    A6 as the graphics.library base pointer
  252. ;--------------------------------------------------
  253. _write
  254.     MoveM.L    D2-D5/A2,-(A7)
  255.     Move.L    D0,D4
  256.     Move.L    D1,D5
  257.     MoveA.L    A0,A2
  258.     Move.L    A0,D3
  259. .end
  260.     Tst.B    (A0)+
  261.     Bne.B    .end
  262.     Sub.L    A0,D3
  263.     Not.L    D3
  264.  
  265.     MoveA.L    A2,A0
  266.     Move.L    D3,D0
  267.     MoveA.L    A5,A1
  268.     SYS    TextLength
  269.  
  270.     Sub.L    D2,D0
  271.     Neg.W    D0
  272.     Asr.W    #$01,D0
  273.     Add.W    D4,D0
  274.     Move.W    D5,D1
  275.  
  276.     MoveA.L    A5,A1
  277.     SYS    Move
  278.  
  279.     Move.B    D6,D0
  280.     MoveA.L    A5,A1
  281.     SYS    SetAPen
  282.  
  283.     MoveA.L    A2,A0
  284.     Move.L    D3,D0
  285.     MoveA.L    A5,A1
  286.     SYS    Text
  287.     MoveM.L    (A7)+,D2-D5/A2
  288.     Rts
  289.  
  290.  
  291. ;--------------------------------------------------
  292. ;Inputs:
  293. ;    D0/D1 as the top-left position
  294. ;    D2/D3 as the bottom-right position (Not included)
  295. ;    D6 color
  296. ;    A3 as the Workbench screen pointer
  297. ;    A6 as graphics.library base pointer
  298. ;--------------------------------------------------
  299. _drawrect
  300.     MoveM.L    D2-D6,-(A7)
  301.     Move.L    D0,D4
  302.     Move.L    D1,D5
  303.     SubQ.L    #$01,D2
  304.     SubQ.L    #$01,D3
  305.  
  306.     Bsr.B    .rect
  307.     BTst.B    #$07,sc_ViewPort+vp_Modes(A3)        ;Hires ?
  308.     Beq.B    .nohires
  309.     AddQ.W    #$01,D4
  310.     SubQ.W    #$01,D2
  311. .nohires
  312.     BTst.B    #$02,sc_ViewPort+vp_Modes+1(A3)        ;Lace ?
  313.     Beq.B    .nolace
  314.     AddQ.W    #$01,D5
  315.     SubQ.W    #$01,D3
  316. .nolace
  317.     Bsr.B    .rect
  318.     Bsr.B    .large
  319.     MoveM.L    (A7)+,D2-D6
  320.     Rts
  321. .large
  322.     AddQ.W    #$01,D4
  323.     SubQ.W    #$01,D2
  324.     AddQ.W    #$01,D5
  325.     SubQ.W    #$01,D3
  326.     MoveQ    #$00,D6
  327. .rect
  328.     Move.B    D6,D0
  329.     MoveA.L    A5,A1
  330.     SYS    SetAPen
  331.  
  332.     Move.L    D4,D0
  333.     Move.L    D3,D1
  334.     MoveA.L    A5,A1
  335.     SYS    Move
  336.  
  337.     Move.L    D2,D0
  338.     Move.L    D3,D1
  339.     MoveA.L    A5,A1
  340.     SYS    Draw
  341.  
  342.     Move.L    D2,D0
  343.     Move.L    D5,D1
  344.     MoveA.L    A5,A1
  345.     SYS    Draw
  346.  
  347.     Move.B    D6,D0
  348.     Beq.B    .clear
  349.     Eor.B    #$03,D0
  350. .clear
  351.     MoveA.L    A5,A1
  352.     SYS    SetAPen
  353.  
  354.     Move.L    D4,D0
  355.     Move.L    D3,D1
  356.     MoveA.L    A5,A1
  357.     SYS    Move
  358.  
  359.     Move.L    D4,D0
  360.     Move.L    D5,D1
  361.     MoveA.L    A5,A1
  362.     SYS    Draw
  363.  
  364.     Move.L    D2,D0
  365.     Move.L    D5,D1
  366.     MoveA.L    A5,A1
  367.     SYM    Draw
  368.  
  369.  
  370. OffsetX        Dc.W    0
  371. OffsetY        Dc.W    0
  372. GBase        Dc.L    0
  373. IBase        Dc.L    0
  374. MyWindow    Dc.L    0
  375. MyRPort        Ds.B    rp_SIZEOF
  376. MyNewWindow
  377.     Dc.W    0,0,0,0
  378.     Dc.B    1,0
  379.     Dc.L    RAWKEY!MOUSEBUTTONS        ;Close Escape or Click inside
  380.     Dc.L    $31800
  381.     Dc.L    0,0,0,0,0
  382.     Dc.W    0,0,0,0
  383.     Dc.W    WBENCHSCREEN
  384.  
  385. Title        Dc.B    "stub -- lk V1.03 by Alexis WILKE (c) 1994",0
  386. Comment        Dc.B    "(Type ESC to continue)",0
  387. Function    Dc.B    "Function: "
  388. FuncName    Dc.B    "                           "
  389. FuncNameEnd
  390.         Dc.B    0
  391. FuncDefault    Dc.B    "no function name available."
  392. OKText        Dc.B    "OK",0
  393. GName        Dc.B    "graphics.library",0
  394. IName        Dc.B    "intuition.library",0
  395.  
  396.